#include <head.h>

int main(int argc, char const *argv[])
{

    // 创建子进程，退出父进程。
    pid_t pid = 0;
    if (-1 == (pid = fork()))
    {
        ERRLOG("创建子进程失败");
    }
    if (pid > 0) // 父进程
    {
        exit(0);
    }
    // 在子进程中调用 setsid() 创建新的会话，使子进程成为新的会话首进程，并脱离终端控制。
    pid_t sid = 0;
    if (-1 == (sid = setsid()))
    {
        ERRLOG("创建会话失败");
    }

    // 将当前工作目录更改为根目录，以防止占用挂载点。 chdir()
    if (chdir("/") < 0)
    {
        perror("chdir failed");
        exit(1);
    }

    // 重设文件权限掩码，以避免继承父进程的权限掩码。umask
    umask(0);
    // 关闭不再需要的文件描述符（如标准输入、输出、错误）。
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    // 守护进程进入一个无限循环，执行预定的任务。
    while (1)
    {
        // 在此处执行守护进程的具体任务
        // 例如定时记录日志、处理某些服务请求等

        // 这里简单模拟每隔30秒输出一行日志到文件
        char buf[128] = "日志 明天放假\n";
        int fd = open("/tmp/log.log", O_CREAT | O_WRONLY, 0666);

        write(fd, buf, strlen(buf));

        sleep(1);
    }

    return 0;
}

